import { NextResponse } from "next/server";
import connect from "@/utils/mongodb";
import User from "@/model/User";
import { verificationDB } from "@/utils/verificationDB";
import bcrypt from "bcryptjs";

// 密码强度验证（与修改密码逻辑一致）
const isPasswordStrong = (password) => {
  return /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/.test(password);
};

export async function POST(request) {
  try {
    // 1. 解析请求数据
    const { email, code, newPassword, confirmPassword } = await request.json();

    // 2. 基础参数校验
    if (!email || !code || !newPassword || !confirmPassword) {
      return NextResponse.json(
        { error: "请填写所有字段" },
        { status: 400 }
      );
    }

    if (newPassword !== confirmPassword) {
      return NextResponse.json(
        { error: "两次输入的密码不一致" },
        { status: 400 }
      );
    }

    if (!isPasswordStrong(newPassword)) {
      return NextResponse.json(
        { 
          error: "新密码强度不足：至少8位，包含大小写字母、数字和特殊字符（@$!%*?&）" 
        },
        { status: 400 }
      );
    }

    // 3. 验证验证码有效性
    const storedCode = await verificationDB.findOne({
      email,
      code,
      type: "reset-password", // 区分登录验证码
      expires: { $gt: Date.now() } // 验证码未过期
    });

    if (!storedCode) {
      return NextResponse.json(
        { error: "验证码无效或已过期，请重新获取" },
        { status: 400 }
      );
    }

    // 4. 验证用户存在性
    await connect();
    const user = await User.findOne({ email });
    if (!user) {
      return NextResponse.json(
        { error: "用户不存在" },
        { status: 404 }
      );
    }

    // 5. 更新密码并清除验证码
    const hashedPassword = await bcrypt.hash(newPassword, 10);
    user.password = hashedPassword;
    await user.save();

    // 删除已使用的验证码（防止重复使用）
    await verificationDB.remove({ _id: storedCode._id });

    // 6. 返回成功响应
    return NextResponse.json({
      message: "密码重置成功，请使用新密码登录"
    });

  } catch (error) {
    console.error("重置密码接口错误:", error);
    return NextResponse.json(
      { error: "重置密码失败，请稍后再试" },
      { status: 500 }
    );
  }
}